/******************************************************************************
 * Copyright (C) 2017 Chengdu Dlhd information industry co. LTD.
 * All Rights Reserved.
 * 本软件为成都顶联互动信息产业有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package net.dgg.dggcloud.service.jrcrm.service.cms;

import net.dgg.dggcloud.service.common.exception.BizException;
import org.csource.mongodb.FileStoreForMongodb;
import org.csource.mongodb.MFileItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.List;

/**
 * @ClassName: FileStoreForMongodbService
 * @Description: Mongodb文件上传
 * @Author 汤宏
 * @date 2017/11/16 16:42
 */
@Service
public class FileStoreForMongodbService {
    @Autowired
    private FileStoreForMongodb filestoreformongodb;

    /**
     * 文件上传
     * @param fileId 自定义文件ID：表名+字段名+业务数据ID，如orf_order-fild-111545
     * @param file MultipartFile文件
     * @return
     */
    public MFileItem saveFile(String fileId, MultipartFile file) {
        MFileItem fsl = null;
        InputStream fs = null;
        ByteArrayOutputStream bos = null;
        try {
            //转byte[]
            byte[] buffer = null;
            fs = file.getInputStream();
            bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int n;
            while ((n = fs.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            buffer = bos.toByteArray();
            //-------------文件上传------------------------------------------
            //文件id,文件对象,文件名,文件扩展名
            //获取文件名
            String fileName = file.getOriginalFilename();
            // 获取文件扩展名
            String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
            fsl = filestoreformongodb.saveFiles(fileId, buffer, fileName, ext);
            System.out.println("文件路径:" + fsl.getFilepath()+"   文件id:" + fsl.getFileid()+ "   文件名:" + fsl.getFilename()+"   文件上传时间:" + fsl.getFiledate());
        } catch (FileNotFoundException e) {
            throw new BizException("文件不存在", 10009);
        } catch (IOException e) {
            throw new BizException("文件上传异常", 10009);
        } finally {
            if (fs != null) {
                try {
                    fs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fs != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return fsl;
    }

    /**
     * 根据文件ID查询文件信息   用“-”分割，便于表名+字段名+业务数据ID，如orf_order-fild-111545
     * @param fileId 文件ID
     * @return
     */
    public List<MFileItem> findFile(String fileId) {
        List<MFileItem> ls = filestoreformongodb.findFiles(fileId);
        return ls;
    }

    /**
     * 根据fileId和fileName删除对应文件
     * @param fileId 文件ID
     * @param fileName 文件名称
     * @return
     */
    public Boolean delFile(String fileId, String fileName){
        return filestoreformongodb.delFile(fileId, fileName);
    }

    /**
     * 根据客户ID模糊匹配文件信息列表
     * @param customerId 客户id
     * @return
     */
    public List<MFileItem> findFiles(Long customerId) {
        Criteria criteria = Criteria.where("fileid").regex("^" + customerId + "-.*$");
        List<MFileItem> ls = filestoreformongodb.findFiles(criteria);
        return ls;
    }
}
